/**
 * 表接口
 * License: BSD
 * Authors: Lucifer (786325481@QQ.com)
 * Copyright: Copyright (C) 2008 Lucifer. All rights reserved.
 */

module system.collections.IList;

import system.collections.IEnumerable;
import system.collections.ICollection;
/**
 * 表示可按照索引单独访问的一组对象。
 */
public interface IList(T) : ICollection!(T), IEnumerable!(T)
{
    /** 获取指定索引处的元素。*/
    /**
     * Params: index = 要获得的元素从零开始的索引。
     */
    T opIndex(int index);
    /** 设置指定索引处的元素。*/
    /**
     * Params: index = 要设置的元素从零开始的索引。
     *         item = 指定索引处的元素。
     */
    void opIndexAssign(T item, int index);
    /**
     * 确定 IList(T) 中特定项的索引。
     * Params: item = 要在 IList(T) 中定位的对象。
     * Returns: 如果在列表中找到，则为 item 的索引；否则为 -1。
     * Comments: 如果某对象在列表中出现多次，则 IndexOf 方法将始终返回找到的第一个实例。
     */
    int indexOf(T item);
    /**
     * 将一个项插入指定索引处的 IList(T)。
     * Params: index = 从零开始的索引，应在该位置插入 item。
     *         item = 要插入到 IList(T) 中的对象。
     * Comments: 如果 index 等于 IList 中的项数，则将 item 追加到列表。
     *           在连续元素集合（如列表）中，插入点后的元素会下移以容纳新的元素。
     *           如果该集合已编制索引，则还更新已移动的元素的索引。
     *           此行为不适用于元素按概念分组到存储桶中的集合（如哈希表）。
     */
    void insert(int index, T item);
    /**
     * 移除指定索引处的 IList 项。
     * Params: index = 从零开始的索引（属于要移除的项）。
     * Comments: 在连续元素的集合（如列表）中，已移除元素之后的元素上移以占据空出的位置。
     *           如果该集合已编制索引，则还更新已移动的元素的索引。
     *           此行为不适用于元素按概念分组到存储桶中的集合（如哈希表）。
     */
    void removeAt(int index);
}
